<?php

class Autoevaluacion_Model_DiligenciarEncuestas extends Model_Cna {
	
	
	public function __construct() {
		parent::__construct();
	}
	
	/**
	 * Retorna un registro de poblacion por su id de diligenciamiento
	 * @param string $id
	 */
	public function getPoblacionById($id) {
	    $poblacionTable = new Solicitudes_Model_DbTable_Poblacion();
	    return $poblacionTable->fetchRow(array("id=?"=>$id));
	}
	
	/**
	 * Guarda las respuestas de un usuario a una encuesta
	 * @param integer $codpoblacion
	 * @param array $secciones
	 * @param array $respuestas
	 */
	public function saveRespuestas($codpoblacion, array $secciones, array $respuestas) {
	    $poblacionTable = new Solicitudes_Model_DbTable_Poblacion();
	    $poblacionTable->getAdapter()->beginTransaction();
	    try {
	        $resTable = new Autoevaluacion_Model_DbTable_Respuestas();
	        $where = $resTable->getAdapter()->quoteInto('codpoblacion = ?', $codpoblacion);
	        	        
	        //se eliminan las respuestas anteriores si las hay
	        $resTable->delete($where);
	        //se marca como ya diligenciada con la fecha
	        $poblacionTable->update(array('fechadiligencia'=> new Zend_Db_Expr("current_date")), $where);
	        
	        $datos = array();
	        $datos["codpoblacion"] = $codpoblacion;
	        //Zend_Debug::dump($respuestas);//throw new Exception("victor");
    	    foreach ($secciones as $seccion) {
                foreach ($seccion["elementos"] as $elemento) {
                    $datos["codelementolista"] = $elemento["codelementolista"];
                    
                    $name = "opcion_{$elemento["codelementolista"]}";
                    $valor = $respuestas[$name];
                    if(empty($valor)) {
                        throw new Exception("Faltan preguntas por diligenciar");
                    }
                    if(is_array($valor) && $elemento["tipopregunta"] != "MM") {
                        throw new Exception("Se ha detectado intento de manipulación");
                    }
                    if(!is_array($valor)) {
                        $valor = array($valor);
                    }
                    foreach($valor as $v) {
                        $datos["codescalarespuesta"] = $v;
                        $resTable->insert($datos);
                    }
                }
            }
            $poblacionTable->getAdapter()->commit();
	    } catch(Exception $e) {
	        $poblacionTable->getAdapter()->rollBack();
	        throw $e;
	    }
	}
	
	
}//fin de la clase